package co.com.coomeva.adminEvaluacion.modelo.util;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class DatabaseUtil {
	//Las variables deben tener el mismo nombre de la secuencia...
	public static final String ED_SEQ_LOGEVALUACIONES = "ED_LOGEVALUACIONES_SEQ";
	public static final String ED_SEQ_LOGPERIODOEVALUACION = "ED_LOGPERIODOEVALUACION_SEQ";
	public static final String ED_LOGCOLABORADORJEFE_SEQ = "ED_LOGCOLABORADORJEFE_SEQ";
	public static final String ED_LOGITEMS_SEQ = "ED_LOGITEMS_SEQ";
	public static final String ED_LOGUSUARIOS_SEQ = "ED_LOGUSUARIOS_SEQ";
	public static final String ED_ITEM_SEQ = "ED_ITEM_SEQ";
	public static final String ED_PPERIODOEVALUACION_SEQ = "ED_PPERIODOEVALUACION_SEQ";
	
	public static Long nextValue(Session session, String strSequence) throws Exception {
		String strSql = new String("SELECT " + strSequence + ".NEXTVAL VALOR FROM DUAL");
		
		Long lNextVal = new Long(session.createSQLQuery(strSql).uniqueResult().toString());
		
		return lNextVal;
	}
	
	/*
	 * Metodo para ejecutar directamente SQL de INSERT, DELETE y UPDATE
	 * */
	public static boolean ejecutarUpdate(Session session, String strQuery) throws Exception {
		//System.out.println("QUERY: " + strQuery);
	//	Transaction trans = session.beginTransaction();
		int iResult = session.createSQLQuery(strQuery).executeUpdate();
	
		if (iResult != 0) {
			return true;
		}
		return false;
	}
	/*
	 * Metodo para ejecutar las sentencias SQL de SELECT.
	 * Para utilizarlos, se debe mapear con la clase modelo.entidades.consulta.Consulta
	 * 
	 * Para ver su uso, vea el siguiente metodo:
	 * EdPModuloPeriodoLogica.consultarModulosPeriodo(Long consPeriodo)
	 */
	@SuppressWarnings("unchecked")
	public static List ejecutarConsulta(Session session, String strQuery) {
		List listResult = session.createSQLQuery(strQuery).list();
		return listResult;
	}
	
	public static String obtenerValorParametro(Session session, String nombreParametro) {
		Query qSelect = session.getNamedQuery("consulta_parametro_general");
		qSelect.setString("nombreparametro", nombreParametro);
		
		Object objValorParametro = qSelect.uniqueResult();
		if (objValorParametro == null) {
			return null;
		} else {
			return objValorParametro.toString();
		}
	}

}
